<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 拼接地址栏字符串
        // http://www.qfedu.com:80/index.html?name=zs&age=18
        // https://www.baidu.com:443/index.html?name=zs&age=18

        // http
        // https  网络协议  
        // www.qfedu.com  www.baidu.com 域名    
        // 80 443 端口号 
        // index.html 地址 

        // ?name=zs&age=18  参数

        // 拼接地址栏字符串
        // http  + '://' + www.qfedu.com + ':' + 80 + '/index.html' + '?' + 'name=zs&age=18'
        // https + '://' + www.baidu.com + ':' + 443 + '/index.html' + '?' + 'name=zs&age=18'

        // https + '://' + www.jd.com + ':' + 443 + '/index.html' + '?' + 'name=zs&age=18'
        

        // 柯里化函数式封装 

        // fn()
        // fn(1)
        // fn(1)(2)
        // fn(1)(2)(3)
        // fn(1)(2)(3)(4)

        function myfn(a,b,c,d,e){
            return a+'://'+b+':'+c+'/'+d+'?'+e;
        }

        //功能参数 必须传 
        // 基础参数 可传可不传 
        // function curryig(功能参数,基础参数){
                // 因为每次传一个 所以需要收集参数  
                // 收集参数 参考功能函数参数的个数
                // 如果够了  返回功能函数 
                // 如果不够  返回一个currying 

        // }

        // curring(fn,'http','www.qfedu.com')
        function currying(fn,...args){ 
            // fn就是功能函数  args除了功能函数以外的参数
            let _arg = args || []; // 保存参数的数组
            let len = fn.length; // 获取功能函数的参数个数
            return function(...args){
                _arg = [..._arg,...args]; // 把参数收集起来 
                if(_arg.length < len){ // 判断参数是否够了 
                    return currying(fn,..._arg); // 如果不够  返回一个currying
                }
                else{
                    return fn(..._arg); // 如果够了  返回功能函数 
                }
            }

        //  var a = [1,2,3,34,5];
        //  var b = [8,9,10,11];
        //  c = [...a,...b]
        //  [a,...b,c] = [1,2,3,3,4,5,65]

        // const r1 = currying(myfn,'http','www.qfedu.com','80');
        // // console.log(r1);
        // const r2 = r1('index.html')
        // // console.log(r2);
        // const r3 = r2('name=zs&age=18');
        // console.log(r3);

        // const r1 = currying(myfn,'http','www.qfedu.com');
        // console.log(r1);
        // const r2 = r1('80')
        // console.log(r2);
        // const r3 = r2('index.html')
        // console.log(r3);
        // const r4 = r3('name=zs&age=18');
        // console.log(r4);

        // const r1 = currying(myfn,'http')('www.qfedu.com')('80')('index.html')('name=zs&age=18');
        // console.log(r1);

        // const r1 = currying(myfn,'http','www.qfedu.com');
        // console.log(r1);
        // const r2 = r1('80','index.html');
        // console.log(r2);
        // const r3 = r2('name=zs&age=18');
        // console.log(r3);




    </script>
</body>
</html>